package br.com.boreo.boreoapp_orcamento.dao;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import br.com.boreo.boreoapp_orcamento.model.Vendas_Itens;

public class Vendas_ItensDAO {
	private BoreoAppOrcamentoDAO boreodao;
	private static final String NOME_TABELA   = "vendas_Itens";
	private static final String ID            = "_id";
	private static final String ID_SQL        = "id_sql";
	private static final String ID_VENDA      = "id_venda";
	private static final String COD_PRODUTO   = "cod_produto";
	private static final String PRODUTO       = "produto";
	private static final String ID_PRODUTO    = "id_produto";
	private static final String ID_TRIBUTO    = "id_tributo";
	private static final String CFOP          = "cfop";
	private static final String CST           = "cst";
	private static final String QUANTIDADE    = "quantidade";
	private static final String QTD_FUTURA    = "qtd_futura";
	private static final String QTD_DEVOLVIDA = "qtd_devolvida";
	private static final String PRECO         = "preco";
	private static final String CUSTO         = "custo";
	private static final String PESO          = "peso";
	private static final String DESCONTO      = "desconto";
	private static final String VALOR_BRUTO   = "valor_bruto";
	private static final String ICMS_BASE     = "icms_base";
	private static final String ICMS_ALIQ     = "icms_aliq";
	private static final String ICMS_ALIQRED  = "icms_aliqred";
	private static final String ICMS_IMP      = "icms_imp";
	private static final String IPI_BASE      = "ipi_base";
	private static final String IPI_ALIQ      = "ipi_aliq";
	private static final String IPI_VALOR     = "ipi_valor";
	private static final String NF_ST         = "nf_st";
	private static final String UNIDADE       = "unidade";
	private static final String ID_PROMOCAO   = "id_promocao";
	private static final String VL_FRETE      = "vl_frete";
	private static final String VL_FRETEICMS  = "vl_freteicms";
	private static final String SEPARAR       = "separar";
	private static final String VL_TOTAL      = "vl_total";
	private static final String ORDEM         = "ordem";
	private static final String QTD_CONSULTA  = "qtd_consulta";
	private static final String ID_DEPOSITO   = "id_deposito";
	private static final String PIS_ALIQ      = "pis_aliq";
	private static final String COF_ALIQ      = "cof_aliq";
	private static final String PIS_VALOR     = "pis_valor";
	private static final String COF_VALOR     = "cof_valor";
	private static final String QTDM3_PECA    = "qtdm3_peca";
	private static final String MADEIRA       = "madeira";
	private static final String VALOR_COMIS   = "valor_comis";
	private static final String ID_TINTA      = "id_tinta";
	private static final String BKP_PRECO     = "bkp_preco";
	private static final String BKP_PVENDA    = "bkp_pvenda";
	private static final String ST_BASE       = "st_base";
	private static final String ST_VALOR      = "st_valor";
	private static final String VL_DESPESA    = "vl_despesa";
	private static final String VL_SEGURO     = "vl_seguro";
	private static final String VL_II         = "vl_ii";
	private static final String ID_LOTE       = "id_lote";
	private static final String ENCOMENDA     = "encomenda";
	private static final String ID_KIT        = "id_kit";

	public Vendas_ItensDAO(Context context) {
		boreodao = BoreoAppOrcamentoDAO.getInstance(context);
	}
	
	public long inserir(int id_sql, int id_venda, String cod_produto, String produto, int id_produto, int id_tributo, String cfop, String cst,
			double quantidade, double qtd_futura, double qtd_devolvida, double preco,  double custo, double peso, double desconto, double valor_bruto,
			double icms_base, double icms_aliq, double icms_aliqred, double icms_imp, double ipi_base, double ipi_aliq, double ipi_valor, String nf_st,
			String unidade, int id_promocao, double vl_frete, double vl_freteicms, double separar, double vl_total, double ordem, double qtd_consulta,
			int id_deposito, double pis_aliq, double cof_aliq, double pis_valor, double cof_valor, double qtdm3_peca, double madeira, double valor_comis,
			int id_tinta, double bkp_preco, double bkp_pvenda, double st_base, double st_valor, double vl_despesa, double vl_seguro, double vl_ii,
			int id_lote, double encomenda,  int id_kit){
		
		ContentValues valores = new ContentValues();
		valores.put(ID_SQL, id_sql);
		valores.put(ID_VENDA, id_venda);
		valores.put(COD_PRODUTO, cod_produto);
		valores.put(PRODUTO, produto);
		valores.put(ID_PRODUTO, id_produto);
		valores.put(ID_TRIBUTO, id_tributo);
		valores.put(CFOP, cfop);
		valores.put(CST, cst);
		valores.put(QUANTIDADE, quantidade);
		valores.put(QTD_FUTURA, qtd_futura);
		valores.put(QTD_DEVOLVIDA, qtd_devolvida);
		valores.put(PRECO, preco);
		valores.put(CUSTO, custo);
		valores.put(PESO, peso);
		valores.put(DESCONTO, desconto);
		valores.put(VALOR_BRUTO, valor_bruto);
		valores.put(ICMS_BASE, icms_base);
		valores.put(ICMS_ALIQ, icms_aliq);
		valores.put(ICMS_ALIQRED, icms_aliqred);
		valores.put(ICMS_IMP, icms_imp);
		valores.put(IPI_BASE, ipi_base);
		valores.put(IPI_ALIQ, ipi_aliq);
		valores.put(IPI_VALOR, ipi_valor);
		valores.put(NF_ST, nf_st);
		valores.put(UNIDADE, unidade);
		valores.put(ID_PROMOCAO, id_promocao);
		valores.put(VL_FRETE, vl_frete);
		valores.put(VL_FRETEICMS, vl_freteicms);
		valores.put(SEPARAR, separar);
		valores.put(VL_TOTAL, vl_total);
		valores.put(ORDEM, ordem);
		valores.put(QTD_CONSULTA, qtd_consulta);
		valores.put(ID_DEPOSITO, id_deposito);
		valores.put(PIS_ALIQ, pis_aliq);
		valores.put(COF_ALIQ, cof_aliq);
		valores.put(PIS_VALOR, pis_valor);
		valores.put(COF_VALOR, cof_valor);
		valores.put(QTDM3_PECA, qtdm3_peca);
		valores.put(MADEIRA, madeira);
		valores.put(VALOR_COMIS, valor_comis);
		valores.put(ID_TINTA, id_tinta);
		valores.put(BKP_PRECO, bkp_preco);
		valores.put(BKP_PVENDA, bkp_pvenda);
		valores.put(ST_BASE, st_base);
		valores.put(ST_VALOR, st_valor);
		valores.put(VL_DESPESA, vl_despesa);
		valores.put(VL_SEGURO, vl_seguro);
		valores.put(VL_II, vl_ii);
		valores.put(ID_LOTE, id_lote);
		valores.put(ENCOMENDA, encomenda);
		valores.put(ID_KIT, id_kit);
	
		long retorno = boreodao.getWritableDatabase().insert(NOME_TABELA, null, valores);
	    boreodao.close();
    	return retorno;
	}
	
	public long inserirComId(int id, int id_sql, int id_venda, String cod_produto, String produto, int id_produto, int id_tributo, String cfop, String cst,
			double quantidade, double qtd_futura, double qtd_devolvida, double preco,  double custo, double peso, double desconto, double valor_bruto,
			double icms_base, double icms_aliq, double icms_aliqred, double icms_imp, double ipi_base, double ipi_aliq, double ipi_valor, String nf_st,
			String unidade, int id_promocao, double vl_frete, double vl_freteicms, double separar, double vl_total, double ordem, double qtd_consulta,
			int id_deposito, double pis_aliq, double cof_aliq, double pis_valor, double cof_valor, double qtdm3_peca, double madeira, double valor_comis,
			int id_tinta, double bkp_preco, double bkp_pvenda, double st_base, double st_valor, double vl_despesa, double vl_seguro, double vl_ii,
			int id_lote, double encomenda,  int id_kit) {
		
		ContentValues valores = new ContentValues();
		valores.put(ID, id);
		valores.put(ID_SQL, id_sql);
		valores.put(ID_VENDA, id_venda);
		valores.put(COD_PRODUTO, cod_produto);
		valores.put(PRODUTO, produto);
		valores.put(ID_PRODUTO, id_produto);
		valores.put(ID_TRIBUTO, id_tributo);
		valores.put(CFOP, cfop);
		valores.put(CST, cst);
		valores.put(QUANTIDADE, quantidade);
		valores.put(QTD_FUTURA, qtd_futura);
		valores.put(QTD_DEVOLVIDA, qtd_devolvida);
		valores.put(PRECO, preco);
		valores.put(CUSTO, custo);
		valores.put(PESO, peso);
		valores.put(DESCONTO, desconto);
		valores.put(VALOR_BRUTO, valor_bruto);
		valores.put(ICMS_BASE, icms_base);
		valores.put(ICMS_ALIQ, icms_aliq);
		valores.put(ICMS_ALIQRED, icms_aliqred);
		valores.put(ICMS_IMP, icms_imp);
		valores.put(IPI_BASE, ipi_base);
		valores.put(IPI_ALIQ, ipi_aliq);
		valores.put(IPI_VALOR, ipi_valor);
		valores.put(NF_ST, nf_st);
		valores.put(UNIDADE, unidade);
		valores.put(ID_PROMOCAO, id_promocao);
		valores.put(VL_FRETE, vl_frete);
		valores.put(VL_FRETEICMS, vl_freteicms);
		valores.put(SEPARAR, separar);
		valores.put(VL_TOTAL, vl_total);
		valores.put(ORDEM, ordem);
		valores.put(QTD_CONSULTA, qtd_consulta);
		valores.put(ID_DEPOSITO, id_deposito);
		valores.put(PIS_ALIQ, pis_aliq);
		valores.put(COF_ALIQ, cof_aliq);
		valores.put(PIS_VALOR, pis_valor);
		valores.put(COF_VALOR, cof_valor);
		valores.put(QTDM3_PECA, qtdm3_peca);
		valores.put(MADEIRA, madeira);
		valores.put(VALOR_COMIS, valor_comis);
		valores.put(ID_TINTA, id_tinta);
		valores.put(BKP_PRECO, bkp_preco);
		valores.put(BKP_PVENDA, bkp_pvenda);
		valores.put(ST_BASE, st_base);
		valores.put(ST_VALOR, st_valor);
		valores.put(VL_DESPESA, vl_despesa);
		valores.put(VL_SEGURO, vl_seguro);
		valores.put(VL_II, vl_ii);
		valores.put(ID_LOTE, id_lote);
		valores.put(ENCOMENDA, encomenda);
		valores.put(ID_KIT, id_kit);
	
		
		long retorno = boreodao.getWritableDatabase().insert(NOME_TABELA, null, valores);
	    boreodao.close();
    	return retorno;
	}
	
	public long alterar(int id, int id_sql, int id_venda, String cod_produto, String produto, int id_produto, int id_tributo, String cfop, String cst,
			double quantidade, double qtd_futura, double qtd_devolvida, double preco,  double custo, double peso, double desconto, double valor_bruto,
			double icms_base, double icms_aliq, double icms_aliqred, double icms_imp, double ipi_base, double ipi_aliq, double ipi_valor, String nf_st,
			String unidade, int id_promocao, double vl_frete, double vl_freteicms, double separar, double vl_total, double ordem, double qtd_consulta,
			int id_deposito, double pis_aliq, double cof_aliq, double pis_valor, double cof_valor, double qtdm3_peca, double madeira, double valor_comis,
			int id_tinta, double bkp_preco, double bkp_pvenda, double st_base, double st_valor, double vl_despesa, double vl_seguro, double vl_ii,
			int id_lote, double encomenda,  int id_kit) {
		
		ContentValues valores = new ContentValues();
		valores.put(ID, id);
		valores.put(ID_SQL, id_sql);
		valores.put(ID_VENDA, id_venda);
		valores.put(COD_PRODUTO, cod_produto);
		valores.put(PRODUTO, produto);
		valores.put(ID_PRODUTO, id_produto);
		valores.put(ID_TRIBUTO, id_tributo);
		valores.put(CFOP, cfop);
		valores.put(CST, cst);
		valores.put(QUANTIDADE, quantidade);
		valores.put(QTD_FUTURA, qtd_futura);
		valores.put(QTD_DEVOLVIDA, qtd_devolvida);
		valores.put(PRECO, preco);
		valores.put(CUSTO, custo);
		valores.put(PESO, peso);
		valores.put(DESCONTO, desconto);
		valores.put(VALOR_BRUTO, valor_bruto);
		valores.put(ICMS_BASE, icms_base);
		valores.put(ICMS_ALIQ, icms_aliq);
		valores.put(ICMS_ALIQRED, icms_aliqred);
		valores.put(ICMS_IMP, icms_imp);
		valores.put(IPI_BASE, ipi_base);
		valores.put(IPI_ALIQ, ipi_aliq);
		valores.put(IPI_VALOR, ipi_valor);
		valores.put(NF_ST, nf_st);
		valores.put(UNIDADE, unidade);
		valores.put(ID_PROMOCAO, id_promocao);
		valores.put(VL_FRETE, vl_frete);
		valores.put(VL_FRETEICMS, vl_freteicms);
		valores.put(SEPARAR, separar);
		valores.put(VL_TOTAL, vl_total);
		valores.put(ORDEM, ordem);
		valores.put(QTD_CONSULTA, qtd_consulta);
		valores.put(ID_DEPOSITO, id_deposito);
		valores.put(PIS_ALIQ, pis_aliq);
		valores.put(COF_ALIQ, cof_aliq);
		valores.put(PIS_VALOR, pis_valor);
		valores.put(COF_VALOR, cof_valor);
		valores.put(QTDM3_PECA, qtdm3_peca);
		valores.put(MADEIRA, madeira);
		valores.put(VALOR_COMIS, valor_comis);
		valores.put(ID_TINTA, id_tinta);
		valores.put(BKP_PRECO, bkp_preco);
		valores.put(BKP_PVENDA, bkp_pvenda);
		valores.put(ST_BASE, st_base);
		valores.put(ST_VALOR, st_valor);
		valores.put(VL_DESPESA, vl_despesa);
		valores.put(VL_SEGURO, vl_seguro);
		valores.put(VL_II, vl_ii);
		valores.put(ID_LOTE, id_lote);
		valores.put(ENCOMENDA, encomenda);
		valores.put(ID_KIT, id_kit);
		
		String[] whereAgrs = {Integer.toString(id)};
    	int retorno = boreodao.getWritableDatabase().update(NOME_TABELA, valores, ID+" = ?", whereAgrs);
    	boreodao.close();
    	return retorno;
	}
	
	public ArrayList<Vendas_Itens> selectVendasItens() {
		ArrayList<Vendas_Itens> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" ORDER BY "+ID, null));
		boreodao.close();
		return c;
	}
	
	public ArrayList<Vendas_Itens> selectVendasItensPorId(int id_vendaitem) {
		ArrayList<Vendas_Itens> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" WHERE "+ID+" = "+id_vendaitem+" ORDER BY "+ID, null));
		boreodao.close();
		return c;
	}
	
	public ArrayList<Vendas_Itens> selectVendasItensPorVenda(int id_venda) {
		ArrayList<Vendas_Itens> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" WHERE "+ID_VENDA+" = "+id_venda+" ORDER BY "+ID, null));
		boreodao.close();
		return c;
	}
	
	public ArrayList<Vendas_Itens> selectUltimoItemVenda() {
		ArrayList<Vendas_Itens> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" WHERE "+ID+" = (SELECT MAX("+ID+") FROM "+NOME_TABELA+") ", null));
		boreodao.close();
		return c;
	}
	
	public ArrayList<Vendas_Itens> selectProdutosPorVendaItem(int id_venda, int id_produto) {
		String where = " WHERE "+ID_VENDA+" = "+id_venda+" And "+ID_PRODUTO+" = "+id_produto+" ORDER BY "+ID;
		ArrayList<Vendas_Itens> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+ where, null));
		boreodao.close();
		return c;
	}
	
	public void excluirProdutosPorIdVenda(int id_venda, int id_produto) {
		String where = ID_VENDA+"="+id_venda+" And "+ID_PRODUTO+"="+id_produto;
		boreodao.getReadableDatabase().delete(NOME_TABELA,where, null);
		boreodao.close();
	}
	
	public void excluirItensPorIdVenda(int id_venda) {
		boreodao.getReadableDatabase().delete(NOME_TABELA,ID_VENDA+"="+id_venda,null);
		boreodao.close();
	}
	
	
	public void excluirTodasVendasItens() {
		boreodao.getReadableDatabase().delete(NOME_TABELA, null, null);
	}
	
	public void excluirItensPorId(int id) {
		boreodao.getReadableDatabase().delete(NOME_TABELA,ID+"="+id,null);
		boreodao.close();
	}
		
	private ArrayList<Vendas_Itens> cursorToArray(Cursor c){
		ArrayList<Vendas_Itens> VendasItens = new ArrayList<Vendas_Itens>();
		while (c.moveToNext()) {
			VendasItens.add(new Vendas_Itens(c.getInt(0), c.getInt(1), c.getInt(2), c.getString(3), c.getString(4), c.getInt(5), c.getInt(6), c.getString(7),
					c.getString(8), c.getDouble(9), c.getDouble(10), c.getDouble(11), c.getDouble(12), c.getDouble(13), c.getDouble(14), c.getDouble(15),
					c.getDouble(16), c.getDouble(17), c.getDouble(18), c.getDouble(19), c.getDouble(20), c.getDouble(21), c.getDouble(22), c.getDouble(23),
					c.getString(24), c.getString(25), c.getInt(26), c.getDouble(27), c.getDouble(28), c.getDouble(29), c.getDouble(30), c.getDouble(31),
					c.getDouble(32), c.getInt(33), c.getDouble(34), c.getDouble(35), c.getDouble(36), c.getDouble(37), c.getDouble(38), c.getDouble(39),
					c.getDouble(40), c.getInt(41), c.getDouble(42), c.getDouble(43), c.getDouble(44), c.getDouble(45), c.getDouble(46), c.getDouble(47),
					c.getDouble(48), c.getInt(49), c.getDouble(50), c.getInt(51)));
		}
		return VendasItens;
	}
	
	

}